--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
meshchatx/src/backend/plugin_manager.py 77384b37d45159c23e12a11d5aa6a528d606d3be (77384b37) Text, 28.41 KB
T8b949e# SPDX-License-Identifier: 0BSD
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72import T7ee787json
Tff7b72import T7ee787os
Tff7b72import T7ee787re
Tff7b72import T7ee787shutil
Tff7b72import T7ee787sqlite3
Tff7b72import T7ee787threading
Tff7b72import T7ee787time
Tff7b72from T7ee787dataclasses Tff7b72import Te6edf3dataclassTb4b4b4, Te6edf3field
Tff7b72from T7ee787typing Tff7b72import Te6edf3AnyTb4b4b4, Te6edf3cast
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787plugin_guard Tff7b72import Tb4b4b4(
Te6edf3PLUGIN_ERROR_BUDGETTb4b4b4,
Te6edf3PLUGIN_ERROR_WINDOW_SECONDSTb4b4b4,
Te6edf3PluginSecurityErrorTb4b4b4,
Te6edf3normalize_asset_pathTb4b4b4,
Te6edf3safe_extract_zipTb4b4b4,
Te6edf3validate_invoke_payloadTb4b4b4,
Te6edf3validate_wasm_fileTb4b4b4,
Te6edf3validate_zip_bytesTb4b4b4,
Tb4b4b4)
Te6edf3SUPPORTED_API_VERSION Tff7b72= T79c0ff1
Te6edf3PLUGIN_ID_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff^[a-zA-Z0-9][a-zA-Z0-9._-]Ta5d6ff{Ta5d6ff0,127}$Ta5d6ff"Tb4b4b4)
Te6edf3MINIMAL_PLUGIN_WAT Tff7b72= Ta5d6ff"""
Ta5d6ff(module
Ta5d6ff (import Ta5d6ff"Ta5d6ffhostTa5d6ff"Ta5d6ff Ta5d6ff"Ta5d6fflogTa5d6ff"Ta5d6ff (func (param i32 i32)))
Ta5d6ff (memory (export Ta5d6ff"Ta5d6ffmemoryTa5d6ff"Ta5d6ff) 1)
Ta5d6ff (func (export Ta5d6ff"Ta5d6ffon_hookTa5d6ff"Ta5d6ff) (param i32 i32) (result i32)
Ta5d6ff i32.const 0
Ta5d6ff )
Ta5d6ff (func (export Ta5d6ff"Ta5d6ffinvokeTa5d6ff"Ta5d6ff) (param i32 i32 i32) (result i32)
Ta5d6ff i32.const 0
Ta5d6ff )
Ta5d6ff)
Ta5d6ff"""Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tf0883e@dataclass
Tff7b72class T56d364PluginRecordTb4b4b4:
Tffa657idTb4b4b4: Tffa657str
Te6edf3versionTb4b4b4: Tffa657str
Te6edf3manifestTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]
Te6edf3enabledTb4b4b4: Tffa657bool
Te6edf3install_pathTb4b4b4: Tffa657str
Te6edf3auto_disabled_reasonTb4b4b4: Tffa657str Tff7b72| Tff7b72None Tff7b72= Tff7b72None
Te6edf3announce_handlersTb4b4b4: Tffa657listTb4b4b4[Te6edf3AnyTb4b4b4] Tff7b72= Te6edf3fieldTb4b4b4(Te6edf3default_factoryTff7b72=Tffa657listTb4b4b4)
Te6edf3error_countTb4b4b4: Tffa657int Tff7b72= T79c0ff0
Te6edf3last_error_atTb4b4b4: Tffa657float Tff7b72= T79c0ff0.0
Tff7b72class T56d364PluginManagerTb4b4b4:
T8b949e"""Discover, install, and execute MeshChatX plugins."""
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3storage_dirTb4b4b4: Tffa657strTb4b4b4, Te6edf3appTb4b4b4: Te6edf3Any Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstorage_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3storage_dirTb4b4b4, Ta5d6ff"Ta5d6ffpluginsTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinstalled_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstorage_dirTb4b4b4, Ta5d6ff"Ta5d6ffinstalledTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstate_db_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstorage_dirTb4b4b4, Ta5d6ff"Ta5d6ffplugin_state.dbTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ff_lock Tff7b72= Te6edf3threadingTff7b72.Td2a8ffRLockTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_pluginsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3PluginRecordTb4b4b4] Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ff_wasmtime Tff7b72= Tff7b72None
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinstalled_dirTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_init_state_dbTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_load_installed_pluginsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_init_state_dbTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72with Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstate_db_pathTb4b4b4) Tff7b72as Te6edf3connTb4b4b4:
Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
T8b949e"""
CREATE TABLE IF NOT EXISTS plugin_storage (
plugin_id TEXT NOT NULL,
storage_key TEXT NOT NULL,
storage_value TEXT NOT NULL,
PRIMARY KEY (plugin_id, storage_key)
)
"""
Tb4b4b4)
Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
T8b949e"""
CREATE TABLE IF NOT EXISTS plugin_state (
plugin_id TEXT PRIMARY KEY,
enabled INTEGER NOT NULL DEFAULT 0,
auto_disabled_reason TEXT
)
"""
Tb4b4b4)
Te6edf3connTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffset_appTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4: Te6edf3AnyTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72def Td2a8ff_plugins_runtime_enabledTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffapp Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72True
Tff7b72return Tffa657boolTb4b4b4(Tffa657getattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Ta5d6ff"Ta5d6ffplugins_enabledTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ff_require_runtime_enabledTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_plugins_runtime_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149PermissionErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugins are disabledTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_load_wasmtimeTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ff_wasmtime Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_wasmtime
Tff7b72tryTb4b4b4:
Tff7b72import T7ee787wasmtime
Tff7b72except Tf85149ImportError Tff7b72as Te6edf3excTb4b4b4:
Tff7b72raise Tf85149RuntimeErrorTb4b4b4(Ta5d6ff"Ta5d6ffwasmtime is required for backend pluginsTa5d6ff"Tb4b4b4) Tff7b72from T7ee787exc
Tff7b72selfTff7b72.Td2a8ff_wasmtime Tff7b72= Te6edf3wasmtime
Tff7b72return Te6edf3wasmtime
Tff7b72def Td2a8ff_load_installed_pluginsTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinstalled_dirTb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72for Te6edf3entry Tff7b72in Tffa657sortedTb4b4b4(Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinstalled_dirTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3plugin_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinstalled_dirTb4b4b4, Te6edf3entryTb4b4b4)
Te6edf3manifest_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3plugin_dirTb4b4b4, Ta5d6ff"Ta5d6ffplugin.jsonTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3manifest_pathTb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72tryTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Te6edf3manifest_pathTb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3manifest Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadTb4b4b4(Te6edf3handleTb4b4b4)
Te6edf3manifest Tff7b72= Tff7b72selfTff7b72.Td2a8ff_validate_manifestTb4b4b4(Te6edf3manifestTb4b4b4)
Te6edf3enabledTb4b4b4, Te6edf3auto_disabled_reason Tff7b72= Tff7b72selfTff7b72.Td2a8ff_read_plugin_stateTb4b4b4(Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_pluginsTb4b4b4[Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]Tb4b4b4] Tff7b72= Te6edf3PluginRecordTb4b4b4(
Tffa657idTff7b72=Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3versionTff7b72=Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3manifestTff7b72=Te6edf3manifestTb4b4b4,
Te6edf3enabledTff7b72=Te6edf3enabledTb4b4b4,
Te6edf3install_pathTff7b72=Te6edf3plugin_dirTb4b4b4,
Te6edf3auto_disabled_reasonTff7b72=Te6edf3auto_disabled_reasonTb4b4b4,
Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tffa657printTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffFailed to load plugin from Tffd700{Te6edf3plugin_dirTffd700}Ta5d6ff: Tffd700{Te6edf3excTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_read_plugin_stateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657tupleTb4b4b4[Tffa657boolTb4b4b4, Tffa657str Tff7b72| Tff7b72NoneTb4b4b4]Tb4b4b4:
Tff7b72with Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstate_db_pathTb4b4b4) Tff7b72as Te6edf3connTb4b4b4:
Te6edf3row Tff7b72= Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
Ta5d6ff"Ta5d6ffSELECT enabled, auto_disabled_reason FROM plugin_state WHERE plugin_id = ?Ta5d6ff"Tb4b4b4,
Tb4b4b4(Te6edf3plugin_idTb4b4b4,Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tff7b72.Td2a8fffetchoneTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3rowTb4b4b4:
Tff7b72return Tff7b72FalseTb4b4b4, Tff7b72None
Tff7b72return Tffa657boolTb4b4b4(Te6edf3rowTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3rowTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72def Td2a8ff_write_plugin_stateTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3enabledTb4b4b4: Tffa657boolTb4b4b4, Te6edf3auto_disabled_reasonTb4b4b4: Tffa657str Tff7b72| Tff7b72None Tff7b72= Tff7b72None
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72with Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstate_db_pathTb4b4b4) Tff7b72as Te6edf3connTb4b4b4:
Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
T8b949e"""
INSERT INTO plugin_state (plugin_id, enabled, auto_disabled_reason)
VALUES (?, ?, ?)
ON CONFLICT(plugin_id) DO UPDATE SET
enabled = excluded.enabled,
auto_disabled_reason = excluded.auto_disabled_reason
"""Tb4b4b4,
Tb4b4b4(Te6edf3plugin_idTb4b4b4, T79c0ff1 Tff7b72if Te6edf3enabled Tff7b72else T79c0ff0Tb4b4b4, Te6edf3auto_disabled_reasonTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3connTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_validate_manifestTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3manifestTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3manifestTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin manifest must be an objectTa5d6ff"Tb4b4b4)
Te6edf3plugin_id Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3plugin_idTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3PLUGIN_ID_RETff7b72.Td2a8ffmatchTb4b4b4(Te6edf3plugin_idTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin id is invalidTa5d6ff"Tb4b4b4)
Te6edf3version Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3versionTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3versionTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin version is requiredTa5d6ff"Tb4b4b4)
Te6edf3api_version Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffapiVersionTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3api_version Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin apiVersion is requiredTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3parsed_api_version Tff7b72= Tffa657intTb4b4b4(Te6edf3api_versionTb4b4b4)
Tff7b72except Tb4b4b4(Tf85149TypeErrorTb4b4b4, Tf85149ValueErrorTb4b4b4) Tff7b72as Te6edf3excTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin apiVersion is invalidTa5d6ff"Tb4b4b4) Tff7b72from T7ee787exc
Tff7b72if Te6edf3parsed_api_version Tff7b72!= Te6edf3SUPPORTED_API_VERSIONTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffunsupported apiVersion (expected Tffd700{Te6edf3SUPPORTED_API_VERSIONTffd700}Ta5d6ff)Ta5d6ff"
Tb4b4b4)
Te6edf3permissions Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Tff7b72if Te6edf3permissions Tff7b72and Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3permissionsTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffpermissions must be an objectTa5d6ff"Tb4b4b4)
Tff7b72return Te6edf3manifest
Tff7b72def Td2a8fflist_pluginsTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_plugins_runtime_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4[Tb4b4b4]
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Te6edf3rows Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3record Tff7b72in Tff7b72selfTff7b72.Td2a8ff_pluginsTff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3rowsTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_public_plugin_viewTb4b4b4(Te6edf3recordTb4b4b4)Tb4b4b4)
Te6edf3rowsTff7b72.Td2a8ffsortTb4b4b4(Te6edf3keyTff7b72=Tff7b72lambda Te6edf3itemTb4b4b4: Te6edf3itemTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72return Te6edf3rows
Tff7b72def Td2a8ffget_pluginTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_pluginsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3recordTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_public_plugin_viewTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72def Td2a8ff_public_plugin_viewTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Te6edf3manifest Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifest
Te6edf3permissions Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Te6edf3recordTff7b72.Td2a8ffidTb4b4b4,
Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4: Te6edf3recordTff7b72.Td2a8ffversionTb4b4b4,
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3recordTff7b72.Td2a8ffidTb4b4b4,
Ta5d6ff"Ta5d6ffdescriptionTa5d6ff"Tb4b4b4: Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdescriptionTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffenabledTa5d6ff"Tb4b4b4: Te6edf3recordTff7b72.Td2a8ffenabledTb4b4b4,
Ta5d6ff"Ta5d6ffauto_disabled_reasonTa5d6ff"Tb4b4b4: Te6edf3recordTff7b72.Td2a8ffauto_disabled_reasonTb4b4b4,
Ta5d6ff"Ta5d6ffmanifestTa5d6ff"Tb4b4b4: Te6edf3manifestTb4b4b4,
Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4: Te6edf3permissionsTb4b4b4,
Ta5d6ff"Ta5d6ffcontributesTa5d6ff"Tb4b4b4: Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffcontributesTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffhas_frontendTa5d6ff"Tb4b4b4: Tffa657boolTb4b4b4(Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fffrontendTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffhas_backendTa5d6ff"Tb4b4b4: Tffa657boolTb4b4b4(Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4}
Tff7b72def Td2a8ffinstall_from_directoryTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3source_dirTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_require_runtime_enabledTb4b4b4(Tb4b4b4)
Te6edf3manifest_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3source_dirTb4b4b4, Ta5d6ff"Ta5d6ffplugin.jsonTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3manifest_pathTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin.json not foundTa5d6ff"Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3manifest_pathTb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3manifest Tff7b72= Tff7b72selfTff7b72.Td2a8ff_validate_manifestTb4b4b4(Te6edf3jsonTff7b72.Td2a8ffloadTb4b4b4(Te6edf3handleTb4b4b4)Tb4b4b4)
Te6edf3plugin_id Tff7b72= Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4]
Te6edf3target_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinstalled_dirTb4b4b4, Te6edf3plugin_idTb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexistsTb4b4b4(Te6edf3target_dirTb4b4b4)Tb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3target_dirTb4b4b4)
Te6edf3shutilTff7b72.Td2a8ffcopytreeTb4b4b4(Te6edf3source_dirTb4b4b4, Te6edf3target_dirTb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Te6edf3enabledTb4b4b4, Te6edf3auto_disabled_reason Tff7b72= Tff7b72selfTff7b72.Td2a8ff_read_plugin_stateTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_pluginsTb4b4b4[Te6edf3plugin_idTb4b4b4] Tff7b72= Te6edf3PluginRecordTb4b4b4(
Tffa657idTff7b72=Te6edf3plugin_idTb4b4b4,
Te6edf3versionTff7b72=Te6edf3manifestTb4b4b4[Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4]Tb4b4b4,
Te6edf3manifestTff7b72=Te6edf3manifestTb4b4b4,
Te6edf3enabledTff7b72=Te6edf3enabledTb4b4b4,
Te6edf3install_pathTff7b72=Te6edf3target_dirTb4b4b4,
Te6edf3auto_disabled_reasonTff7b72=Te6edf3auto_disabled_reasonTb4b4b4,
Tb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_public_plugin_viewTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_pluginsTb4b4b4[Te6edf3plugin_idTb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffinstall_from_zip_bytesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3payloadTb4b4b4: Tffa657bytesTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72import T7ee787tempfile
Te6edf3validate_zip_bytesTb4b4b4(Te6edf3payloadTb4b4b4)
Tff7b72with Te6edf3tempfileTff7b72.Td2a8ffTemporaryDirectoryTb4b4b4(Tb4b4b4) Tff7b72as Te6edf3tmpTb4b4b4:
Te6edf3zip_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3tmpTb4b4b4, Ta5d6ff"Ta5d6ffplugin.zipTa5d6ff"Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3zip_pathTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3handleTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3payloadTb4b4b4)
Te6edf3extract_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3tmpTb4b4b4, Ta5d6ff"Ta5d6ffextractTa5d6ff"Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3extract_dirTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3plugin_root Tff7b72= Te6edf3safe_extract_zipTb4b4b4(Te6edf3zip_pathTb4b4b4, Te6edf3extract_dirTb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ffinstall_from_directoryTb4b4b4(Te6edf3plugin_rootTb4b4b4)
Tff7b72def Td2a8ffenableTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_require_runtime_enabledTb4b4b4(Tb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_pluginTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_validate_plugin_runtimeTb4b4b4(Te6edf3recordTb4b4b4)
Te6edf3recordTff7b72.Td2a8ffenabled Tff7b72= Tff7b72True
Te6edf3recordTff7b72.Td2a8ffauto_disabled_reason Tff7b72= Tff7b72None
Te6edf3recordTff7b72.Td2a8fferror_count Tff7b72= T79c0ff0
Te6edf3recordTff7b72.Td2a8fflast_error_at Tff7b72= T79c0ff0.0
Tff7b72selfTff7b72.Td2a8ff_write_plugin_stateTb4b4b4(Te6edf3plugin_idTb4b4b4, Tff7b72TrueTb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_register_plugin_hooksTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_public_plugin_viewTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72def Td2a8ffdisableTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3reasonTb4b4b4: Tffa657str Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_pluginTb4b4b4(Te6edf3plugin_idTb4b4b4)
Te6edf3recordTff7b72.Td2a8ffenabled Tff7b72= Tff7b72False
Tff7b72if Te6edf3reasonTb4b4b4:
Te6edf3recordTff7b72.Td2a8ffauto_disabled_reason Tff7b72= Te6edf3reason
Tff7b72selfTff7b72.Td2a8ff_write_plugin_stateTb4b4b4(Te6edf3plugin_idTb4b4b4, Tff7b72FalseTb4b4b4, Te6edf3recordTff7b72.Td2a8ffauto_disabled_reasonTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_unregister_plugin_hooksTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72if Te6edf3reasonTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_broadcast_plugin_eventTb4b4b4(
Te6edf3plugin_idTb4b4b4, Ta5d6ff"Ta5d6ffplugin.disabledTa5d6ff"Tb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffreasonTa5d6ff"Tb4b4b4: Te6edf3reasonTb4b4b4}
Tb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_public_plugin_viewTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72def Td2a8ffremoveTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_pluginsTff7b72.Td2a8ffpopTb4b4b4(Te6edf3plugin_idTb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Te6edf3recordTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_unregister_plugin_hooksTb4b4b4(Te6edf3recordTb4b4b4)
Te6edf3target_dir Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffinstalled_dirTb4b4b4, Te6edf3plugin_idTb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Te6edf3target_dirTb4b4b4)Tb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3target_dirTb4b4b4)
Tff7b72with Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstate_db_pathTb4b4b4) Tff7b72as Te6edf3connTb4b4b4:
Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
Ta5d6ff"Ta5d6ffDELETE FROM plugin_state WHERE plugin_id = ?Ta5d6ff"Tb4b4b4, Tb4b4b4(Te6edf3plugin_idTb4b4b4,Tb4b4b4)
Tb4b4b4)
Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
Ta5d6ff"Ta5d6ffDELETE FROM plugin_storage WHERE plugin_id = ?Ta5d6ff"Tb4b4b4, Tb4b4b4(Te6edf3plugin_idTb4b4b4,Tb4b4b4)
Tb4b4b4)
Te6edf3connTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffasset_pathTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3asset_nameTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_require_runtime_enabledTb4b4b4(Tb4b4b4)
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_pluginTb4b4b4(Te6edf3plugin_idTb4b4b4)
Te6edf3normalized Tff7b72= Te6edf3normalize_asset_pathTb4b4b4(Te6edf3asset_nameTb4b4b4)
Te6edf3path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3recordTff7b72.Td2a8ffinstall_pathTb4b4b4, Te6edf3normalizedTb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149FileNotFoundErrorTb4b4b4(Te6edf3asset_nameTb4b4b4)
Tff7b72return Te6edf3path
Tff7b72def Td2a8fflocale_pathTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3localeTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657str Tff7b72| Tff7b72NoneTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_pluginTb4b4b4(Te6edf3plugin_idTb4b4b4)
Te6edf3i18n Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffi18nTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Te6edf3directory Tff7b72= Te6edf3i18nTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdirectoryTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6fflocalesTa5d6ff"
Te6edf3default_locale Tff7b72= Te6edf3i18nTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdefaultLocaleTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffenTa5d6ff"
Te6edf3candidates Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3code Tff7b72in Tb4b4b4(Te6edf3localeTb4b4b4, Te6edf3default_localeTb4b4b4, Ta5d6ff"Ta5d6ffenTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3code Tff7b72and Te6edf3code Tff7b72not Tff7b72in Te6edf3candidatesTb4b4b4:
Te6edf3candidatesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3codeTb4b4b4)
Tff7b72for Te6edf3code Tff7b72in Te6edf3candidatesTb4b4b4:
Te6edf3relative Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3directoryTb4b4b4, Ta5d6fffTa5d6ff"Tffd700{Te6edf3codeTffd700}Ta5d6ff.jsonTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Tffea00\\Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4)
Te6edf3path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3recordTff7b72.Td2a8ffinstall_pathTb4b4b4, Te6edf3relativeTb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3path
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffload_locale_messagesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3localeTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Te6edf3path Tff7b72= Tff7b72selfTff7b72.Td2a8fflocale_pathTb4b4b4(Te6edf3plugin_idTb4b4b4, Te6edf3localeTb4b4b4)
Tff7b72if Tff7b72not Te6edf3pathTb4b4b4:
Tff7b72return Tb4b4b4{Tb4b4b4}
Tff7b72with Tffa657openTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3data Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadTb4b4b4(Te6edf3handleTb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3dataTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin locale file must be an objectTa5d6ff"Tb4b4b4)
Tff7b72return Te6edf3data
Tff7b72def Td2a8ffreport_failureTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3reasonTb4b4b4: Tffa657strTb4b4b4, Te6edf3sourceTb4b4b4: Tffa657str Tff7b72= Ta5d6ff"Ta5d6fffrontendTa5d6ff"
Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_pluginsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3recordTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_record_plugin_failureTb4b4b4(
Te6edf3recordTb4b4b4, Ta5d6fffTa5d6ff"Tffd700{Te6edf3sourceTffd700}Ta5d6ff: Tffd700{Te6edf3reasonTffd700}Ta5d6ff"Tb4b4b4, Te6edf3auto_disableTff7b72=Tff7b72True
Tb4b4b4)
Tff7b72def Td2a8ff_require_pluginTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Te6edf3PluginRecordTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_pluginsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3recordTb4b4b4:
Tff7b72raise Tf85149KeyErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffplugin not found: Tffd700{Te6edf3plugin_idTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72return Te6edf3record
Tff7b72def Td2a8ff_permission_allowedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4, Te6edf3capabilityTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3permissions Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Te6edf3managers Tff7b72= Te6edf3permissionsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffmanagersTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]
Tff7b72return Te6edf3capability Tff7b72in Te6edf3managers
Tff7b72def Td2a8ff_hook_allowedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4, Te6edf3hookTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3permissions Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}
Te6edf3hooks Tff7b72= Te6edf3permissionsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffhooksTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]
Tff7b72return Te6edf3hook Tff7b72in Te6edf3hooks
Tff7b72def Td2a8ffstorage_getTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3keyTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657str Tff7b72| Tff7b72NoneTb4b4b4:
Tff7b72with Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstate_db_pathTb4b4b4) Tff7b72as Te6edf3connTb4b4b4:
Te6edf3row Tff7b72= Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
Ta5d6ff"Ta5d6ffSELECT storage_value FROM plugin_storage WHERE plugin_id = ? AND storage_key = ?Ta5d6ff"Tb4b4b4,
Tb4b4b4(Te6edf3plugin_idTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4,
Tb4b4b4)Tff7b72.Td2a8fffetchoneTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3rowTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72if Te6edf3row Tff7b72else Tff7b72None
Tff7b72def Td2a8ffstorage_setTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3keyTb4b4b4: Tffa657strTb4b4b4, Te6edf3valueTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72with Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstate_db_pathTb4b4b4) Tff7b72as Te6edf3connTb4b4b4:
Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(
T8b949e"""
INSERT INTO plugin_storage (plugin_id, storage_key, storage_value)
VALUES (?, ?, ?)
ON CONFLICT(plugin_id, storage_key) DO UPDATE SET storage_value = excluded.storage_value
"""Tb4b4b4,
Tb4b4b4(Te6edf3plugin_idTb4b4b4, Te6edf3keyTb4b4b4, Te6edf3valueTb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3connTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffcall_managerTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3capabilityTb4b4b4: Tffa657strTb4b4b4, Te6edf3argsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]
Tb4b4b4) Tff7b72-Tff7b72> Te6edf3AnyTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_pluginTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3recordTff7b72.Td2a8ffenabledTb4b4b4:
Tff7b72raise Tf85149PermissionErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin is disabledTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_permission_allowedTb4b4b4(Te6edf3recordTb4b4b4, Te6edf3capabilityTb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149PermissionErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffcapability not granted: Tffd700{Te6edf3capabilityTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3capability Tff7b72== Ta5d6ff"Ta5d6ffdestinationPath.readTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_destination_path_readTb4b4b4(Te6edf3argsTb4b4b4)
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffunknown capability: Tffd700{Te6edf3capabilityTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_destination_path_readTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3argsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffapp Tff7b72or Tff7b72not Tffa657getattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Ta5d6ff"Ta5d6ffreticulumTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffpathsTa5d6ff"Tb4b4b4: Tb4b4b4[Tb4b4b4]Tb4b4b4, Ta5d6ff"Ta5d6fftotalTa5d6ff"Tb4b4b4: T79c0ff0Tb4b4b4, Ta5d6ff"Ta5d6ffresponsiveTa5d6ff"Tb4b4b4: T79c0ff0Tb4b4b4, Ta5d6ff"Ta5d6ffunresponsiveTa5d6ff"Tb4b4b4: T79c0ff0Tb4b4b4}
Te6edf3search Tff7b72= Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffsearchTa5d6ff"Tb4b4b4)
Te6edf3limit Tff7b72= Tffa657intTb4b4b4(Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fflimitTa5d6ff"Tb4b4b4) Tff7b72or T79c0ff200Tb4b4b4)
Te6edf3handler Tff7b72= Tffa657getattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Ta5d6ff"Ta5d6ffrnpath_handlerTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Te6edf3handlerTb4b4b4:
Te6edf3result Tff7b72= Te6edf3handlerTff7b72.Td2a8ffget_path_tableTb4b4b4(
Te6edf3searchTff7b72=Tffa657strTb4b4b4(Te6edf3searchTb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4) Tff7b72if Te6edf3search Tff7b72else Tff7b72NoneTb4b4b4,
Te6edf3limitTff7b72=Te6edf3limitTb4b4b4,
Tb4b4b4)
Te6edf3paths Tff7b72= Tb4b4b4[
Tb4b4b4{
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[Ta5d6ff"Ta5d6ffhashTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffhopsTa5d6ff"Tb4b4b4: Te6edf3entryTb4b4b4[Ta5d6ff"Ta5d6ffhopsTa5d6ff"Tb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffviaTa5d6ff"Tb4b4b4: Te6edf3entryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffviaTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffinterfaceTa5d6ff"Tb4b4b4: Te6edf3entryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffinterfaceTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffstateTa5d6ff"Tb4b4b4: Te6edf3entryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffstateTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6fftimestampTa5d6ff"Tb4b4b4: Te6edf3entryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftimestampTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4}
Tff7b72for Te6edf3entry Tff7b72in Te6edf3resultTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftableTa5d6ff"Tb4b4b4, Tb4b4b4[Tb4b4b4]Tb4b4b4)
Tb4b4b4]
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffpathsTa5d6ff"Tb4b4b4: Te6edf3pathsTb4b4b4,
Ta5d6ff"Ta5d6fftotalTa5d6ff"Tb4b4b4: Te6edf3resultTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftotalTa5d6ff"Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3pathsTb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffresponsiveTa5d6ff"Tb4b4b4: Te6edf3resultTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffresponsiveTa5d6ff"Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffunresponsiveTa5d6ff"Tb4b4b4: Te6edf3resultTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffunresponsiveTa5d6ff"Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4,
Tb4b4b4}
Te6edf3destination_hash Tff7b72= Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4)
Te6edf3pathsTb4b4b4: Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3reticulum Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffreticulum
Tff7b72if Te6edf3destination_hashTb4b4b4:
Te6edf3hashes Tff7b72= Tb4b4b4[Te6edf3destination_hashTb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3hashes Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72tryTb4b4b4:
Te6edf3table Tff7b72= Te6edf3reticulumTff7b72.Td2a8ffget_path_tableTb4b4b4(Tb4b4b4)
Te6edf3hashes Tff7b72= Tb4b4b4[
Te6edf3entryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4)
Tff7b72for Te6edf3entry Tff7b72in Te6edf3table
Tff7b72if Te6edf3entryTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4)
Tb4b4b4]
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3hashes Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3item Tff7b72in Te6edf3hashesTb4b4b4:
Tff7b72if Tff7b72not Te6edf3itemTb4b4b4:
Tff7b72continue
Tff7b72tryTb4b4b4:
Te6edf3raw Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3itemTb4b4b4) Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3itemTb4b4b4, Tffa657strTb4b4b4) Tff7b72else Te6edf3item
Te6edf3hops Tff7b72= Tb4b4b4(
Te6edf3reticulumTff7b72.Td2a8ffget_hops_toTb4b4b4(Te6edf3rawTb4b4b4)
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3reticulumTb4b4b4, Ta5d6ff"Ta5d6ffget_hops_toTa5d6ff"Tb4b4b4)
Tff7b72else Tff7b72None
Tb4b4b4)
Te6edf3pathsTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3itemTb4b4b4, Ta5d6ff"Ta5d6ffhopsTa5d6ff"Tb4b4b4: Te6edf3hopsTb4b4b4}Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Te6edf3pathsTff7b72.Td2a8ffappendTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3itemTb4b4b4, Ta5d6ff"Ta5d6ffhopsTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4}Tb4b4b4)
Tff7b72return Tb4b4b4{
Ta5d6ff"Ta5d6ffpathsTa5d6ff"Tb4b4b4: Te6edf3pathsTb4b4b4,
Ta5d6ff"Ta5d6fftotalTa5d6ff"Tb4b4b4: Tffa657lenTb4b4b4(Te6edf3pathsTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffresponsiveTa5d6ff"Tb4b4b4: T79c0ff0Tb4b4b4,
Ta5d6ff"Ta5d6ffunresponsiveTa5d6ff"Tb4b4b4: T79c0ff0Tb4b4b4,
Tb4b4b4}
Tff7b72def Td2a8ffinvokeTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3methodTb4b4b4: Tffa657strTb4b4b4, Te6edf3argsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4] Tff7b72| Tff7b72None Tff7b72= Tff7b72None
Tb4b4b4) Tff7b72-Tff7b72> Te6edf3AnyTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_require_runtime_enabledTb4b4b4(Tb4b4b4)
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_require_pluginTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3recordTff7b72.Td2a8ffenabledTb4b4b4:
Tff7b72raise Tf85149PermissionErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin is disabledTa5d6ff"Tb4b4b4)
Te6edf3args Tff7b72= Te6edf3args Tff7b72or Tb4b4b4{Tb4b4b4}
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3method Tff7b72== Ta5d6ff"Ta5d6ffcallManagerTa5d6ff"Tb4b4b4:
Te6edf3capability Tff7b72= Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffcapabilityTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3capabilityTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3capabilityTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffcapability is requiredTa5d6ff"Tb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ffcall_managerTb4b4b4(Te6edf3plugin_idTb4b4b4, Te6edf3capabilityTb4b4b4, Te6edf3argsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffargsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)
Tff7b72if Te6edf3method Tff7b72== Ta5d6ff"Ta5d6ffreadPathsTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffcall_managerTb4b4b4(Te6edf3plugin_idTb4b4b4, Ta5d6ff"Ta5d6ffdestinationPath.readTa5d6ff"Tb4b4b4, Te6edf3argsTb4b4b4)
Te6edf3backend Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3backendTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffunknown method: Tffd700{Te6edf3methodTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_invoke_wasmTb4b4b4(Te6edf3recordTb4b4b4, Te6edf3methodTb4b4b4, Te6edf3args Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_record_plugin_failureTb4b4b4(Te6edf3recordTb4b4b4, Te6edf3excTb4b4b4, Te6edf3auto_disableTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72raise
Tff7b72def Td2a8ff_resolve_backend_wasm_pathTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3backend Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifestTb4b4b4[Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4]
Te6edf3wasm_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3recordTff7b72.Td2a8ffinstall_pathTb4b4b4, Te6edf3backendTb4b4b4[Ta5d6ff"Ta5d6ffentryTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3wasm_pathTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_ensure_minimal_wasmTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3validate_wasm_fileTb4b4b4(Te6edf3wasm_pathTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3wasm_pathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Tff7b72if Te6edf3handleTff7b72.Td2a8ffreadTb4b4b4(T79c0ff4Tb4b4b4) Tff7b72!= Ta5d6ffbTa5d6ff"Tffea00\x00Ta5d6ffasmTa5d6ff"Tb4b4b4:
Tff7b72raise Te6edf3PluginSecurityErrorTb4b4b4(Ta5d6ff"Ta5d6ffinvalid wasm moduleTa5d6ff"Tb4b4b4)
Tff7b72except Tb4b4b4(Te6edf3PluginSecurityErrorTb4b4b4, Tf85149OSErrorTb4b4b4, Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Te6edf3parent Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Te6edf3wasm_pathTb4b4b4)
Tff7b72if Te6edf3parentTb4b4b4:
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3parentTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3wasm_pathTb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3wasm_pathTb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_ensure_minimal_wasmTb4b4b4(Te6edf3recordTb4b4b4)
Tff7b72return Te6edf3wasm_path
Tff7b72def Td2a8ff_invoke_wasmTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4, Te6edf3methodTb4b4b4: Tffa657strTb4b4b4, Te6edf3argsTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]
Tb4b4b4) Tff7b72-Tff7b72> Te6edf3AnyTb4b4b4:
Te6edf3wasmtime Tff7b72= Tff7b72selfTff7b72.Td2a8ff_load_wasmtimeTb4b4b4(Tb4b4b4)
Te6edf3wasm_path Tff7b72= Tff7b72selfTff7b72.Td2a8ff_resolve_backend_wasm_pathTb4b4b4(Te6edf3recordTb4b4b4)
Te6edf3engine Tff7b72= Te6edf3wasmtimeTff7b72.Td2a8ffEngineTb4b4b4(Tb4b4b4)
Te6edf3module Tff7b72= Te6edf3wasmtimeTff7b72.Td2a8ffModuleTff7b72.Td2a8fffrom_fileTb4b4b4(Te6edf3engineTb4b4b4, Te6edf3wasm_pathTb4b4b4)
Te6edf3store Tff7b72= Te6edf3wasmtimeTff7b72.Td2a8ffStoreTb4b4b4(Te6edf3engineTb4b4b4)
Te6edf3storeTff7b72.Td2a8ffset_fuelTb4b4b4(T79c0ff1_000_000Tb4b4b4)
Te6edf3linker Tff7b72= Te6edf3wasmtimeTff7b72.Td2a8ffLinkerTb4b4b4(Te6edf3engineTb4b4b4)
Te6edf3logsTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffhost_logTb4b4b4(Te6edf3callerTb4b4b4, Te6edf3ptrTb4b4b4, Te6edf3lengthTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3memory Tff7b72= Te6edf3callerTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffmemoryTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3memory Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return
Te6edf3data Tff7b72= Te6edf3memoryTff7b72.Td2a8ffreadTb4b4b4(Te6edf3storeTb4b4b4, Te6edf3ptrTb4b4b4, Te6edf3ptr Tff7b72+ Te6edf3lengthTb4b4b4)
Te6edf3logsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3dataTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4, Te6edf3errorsTff7b72=Ta5d6ff"Ta5d6ffreplaceTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3linkerTff7b72.Td2a8ffdefine_funcTb4b4b4(
Ta5d6ff"Ta5d6ffhostTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fflogTa5d6ff"Tb4b4b4,
Te6edf3wasmtimeTff7b72.Td2a8ffFuncTypeTb4b4b4(Tb4b4b4[Te6edf3wasmtimeTff7b72.Td2a8ffValTypeTff7b72.Td2a8ffi32Tb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3wasmtimeTff7b72.Td2a8ffValTypeTff7b72.Td2a8ffi32Tb4b4b4(Tb4b4b4)Tb4b4b4]Tb4b4b4, Tb4b4b4[Tb4b4b4]Tb4b4b4)Tb4b4b4,
Te6edf3host_logTb4b4b4,
Tb4b4b4)
Te6edf3instance Tff7b72= Te6edf3linkerTff7b72.Td2a8ffinstantiateTb4b4b4(Te6edf3storeTb4b4b4, Te6edf3moduleTb4b4b4)
Te6edf3payload Tff7b72= Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffmethodTa5d6ff"Tb4b4b4: Te6edf3methodTb4b4b4, Ta5d6ff"Ta5d6ffargsTa5d6ff"Tb4b4b4: Te6edf3argsTb4b4b4}Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3validate_invoke_payloadTb4b4b4(Te6edf3payloadTb4b4b4)
Te6edf3exports Tff7b72= Te6edf3castTb4b4b4(Te6edf3AnyTb4b4b4, Te6edf3instanceTff7b72.Td2a8ffexportsTb4b4b4(Te6edf3storeTb4b4b4)Tb4b4b4)
Te6edf3memory Tff7b72= Te6edf3exportsTb4b4b4[Ta5d6ff"Ta5d6ffmemoryTa5d6ff"Tb4b4b4]
Te6edf3alloc Tff7b72= Te6edf3exportsTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffallocTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3allocTb4b4b4:
Te6edf3ptr Tff7b72= Te6edf3allocTb4b4b4(Te6edf3storeTb4b4b4, Tffa657lenTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3ptr Tff7b72= T79c0ff0
Tff7b72if Te6edf3memoryTff7b72.Td2a8ffdata_lenTb4b4b4(Te6edf3storeTb4b4b4) Tff7b72< Tffa657lenTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4:
Te6edf3memoryTff7b72.Td2a8ffgrowTb4b4b4(
Te6edf3storeTb4b4b4,
Tffa657maxTb4b4b4(T79c0ff1Tb4b4b4, Tb4b4b4(Tffa657lenTb4b4b4(Te6edf3payloadTb4b4b4) Tff7b72- Te6edf3memoryTff7b72.Td2a8ffdata_lenTb4b4b4(Te6edf3storeTb4b4b4) Tff7b72+ T79c0ff65535Tb4b4b4) Tff7b72/Tff7b72/ T79c0ff65536Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3data Tff7b72= Te6edf3memoryTff7b72.Td2a8ffdata_ptrTb4b4b4(Te6edf3storeTb4b4b4)
Te6edf3dataTb4b4b4[Te6edf3ptr Tb4b4b4: Te6edf3ptr Tff7b72+ Tffa657lenTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4] Tff7b72= Te6edf3payload
Te6edf3invoke Tff7b72= Te6edf3exportsTb4b4b4[Ta5d6ff"Ta5d6ffinvokeTa5d6ff"Tb4b4b4]
Te6edf3invokeTb4b4b4(Te6edf3storeTb4b4b4, Te6edf3ptrTb4b4b4, Tffa657lenTb4b4b4(Te6edf3payloadTb4b4b4)Tb4b4b4, T79c0ff0Tb4b4b4)
Tff7b72return Tb4b4b4{Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4, Ta5d6ff"Ta5d6fflogsTa5d6ff"Tb4b4b4: Te6edf3logsTb4b4b4}
Tff7b72def Td2a8ff_ensure_minimal_wasmTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3wasmtime Tff7b72= Tff7b72selfTff7b72.Td2a8ff_load_wasmtimeTb4b4b4(Tb4b4b4)
Te6edf3wasm_bytes Tff7b72= Te6edf3wasmtimeTff7b72.Td2a8ffwat2wasmTb4b4b4(Te6edf3MINIMAL_PLUGIN_WATTb4b4b4)
Te6edf3backend Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifestTb4b4b4[Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4]
Te6edf3wasm_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3recordTff7b72.Td2a8ffinstall_pathTb4b4b4, Te6edf3backendTb4b4b4[Ta5d6ff"Ta5d6ffentryTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Te6edf3wasm_pathTb4b4b4)Tb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3wasm_pathTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3handleTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3wasm_bytesTb4b4b4)
Tff7b72return Te6edf3wasm_path
Tff7b72def Td2a8ffdispatch_hookTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3hookTb4b4b4: Tffa657strTb4b4b4, Te6edf3payloadTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3record Tff7b72= Tff7b72selfTff7b72.Td2a8ff_pluginsTff7b72.Td2a8ffgetTb4b4b4(Te6edf3plugin_idTb4b4b4)
Tff7b72if Tff7b72not Te6edf3record Tff7b72or Tff7b72not Te6edf3recordTff7b72.Td2a8ffenabledTb4b4b4:
Tff7b72return
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_hook_allowedTb4b4b4(Te6edf3recordTb4b4b4, Te6edf3hookTb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3recordTff7b72.Td2a8ffmanifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_invoke_wasmTb4b4b4(Te6edf3recordTb4b4b4, Ta5d6ff"Ta5d6ffon_hookTa5d6ff"Tb4b4b4, Tb4b4b4{Ta5d6ff"Ta5d6ffhookTa5d6ff"Tb4b4b4: Te6edf3hookTb4b4b4, Ta5d6ff"Ta5d6ffpayloadTa5d6ff"Tb4b4b4: Te6edf3payloadTb4b4b4}Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_broadcast_plugin_eventTb4b4b4(Te6edf3plugin_idTb4b4b4, Te6edf3hookTb4b4b4, Te6edf3payloadTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_record_plugin_failureTb4b4b4(Te6edf3recordTb4b4b4, Te6edf3excTb4b4b4, Te6edf3auto_disableTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ff_validate_plugin_runtimeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3manifest Tff7b72= Te6edf3recordTff7b72.Td2a8ffmanifest
Te6edf3frontend Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fffrontendTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3frontendTb4b4b4:
Te6edf3entry Tff7b72= Te6edf3frontendTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffentryTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3entryTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3entryTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin frontend entry is missingTa5d6ff"Tb4b4b4)
Te6edf3frontend_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffasset_pathTb4b4b4(Te6edf3recordTff7b72.Td2a8ffidTb4b4b4, Te6edf3entryTb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffgetsizeTb4b4b4(Te6edf3frontend_pathTb4b4b4) Tff7b72<Tff7b72= T79c0ff0Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin frontend entry is emptyTa5d6ff"Tb4b4b4)
Te6edf3backend Tff7b72= Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffbackendTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3backendTb4b4b4:
Tff7b72return
Te6edf3entry Tff7b72= Te6edf3backendTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffentryTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3entryTb4b4b4, Tffa657strTb4b4b4) Tff7b72or Tff7b72not Te6edf3entryTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffplugin backend entry is missingTa5d6ff"Tb4b4b4)
Te6edf3wasm_path Tff7b72= Tff7b72selfTff7b72.Td2a8ff_resolve_backend_wasm_pathTb4b4b4(Te6edf3recordTb4b4b4)
Te6edf3wasmtime Tff7b72= Tff7b72selfTff7b72.Td2a8ff_load_wasmtimeTb4b4b4(Tb4b4b4)
Te6edf3engine Tff7b72= Te6edf3wasmtimeTff7b72.Td2a8ffEngineTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3wasmtimeTff7b72.Td2a8ffModuleTff7b72.Td2a8fffrom_fileTb4b4b4(Te6edf3engineTb4b4b4, Te6edf3wasm_pathTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3excTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffinvalid backend wasm module: Tffd700{Te6edf3excTffd700}Ta5d6ff"Tb4b4b4) Tff7b72from T7ee787exc
Tff7b72def Td2a8ff_record_plugin_failureTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4,
Te6edf3excTb4b4b4: Tf85149Exception Tff7b72| Tffa657strTb4b4b4,
Tff7b72*Tb4b4b4,
Te6edf3auto_disableTb4b4b4: Tffa657boolTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4:
Te6edf3should_disable Tff7b72= Tff7b72False
Te6edf3disable_reason Tff7b72= Tffa657strTb4b4b4(Te6edf3excTb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ff_lockTb4b4b4:
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3now Tff7b72- Te6edf3recordTff7b72.Td2a8fflast_error_at Tff7b72> Te6edf3PLUGIN_ERROR_WINDOW_SECONDSTb4b4b4:
Te6edf3recordTff7b72.Td2a8fferror_count Tff7b72= T79c0ff0
Te6edf3recordTff7b72.Td2a8fferror_count Tff7b72+Tff7b72= T79c0ff1
Te6edf3recordTff7b72.Td2a8fflast_error_at Tff7b72= Te6edf3now
Tff7b72if Te6edf3auto_disable Tff7b72and Te6edf3recordTff7b72.Td2a8fferror_count Tff7b72>Tff7b72= Te6edf3PLUGIN_ERROR_BUDGETTb4b4b4:
Te6edf3should_disable Tff7b72= Tff7b72True
Te6edf3disable_reason Tff7b72= Tb4b4b4(
Ta5d6fffTa5d6ff"Ta5d6ffAuto-disabled after Tffd700{Te6edf3recordTff7b72.Td2a8fferror_countTffd700}Ta5d6ff errors: Tffd700{Te6edf3disable_reasonTffd700}Ta5d6ff"
Tb4b4b4)
Tff7b72if Te6edf3should_disableTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffdisableTb4b4b4(Te6edf3recordTff7b72.Td2a8ffidTb4b4b4, Te6edf3reasonTff7b72=Te6edf3disable_reasonTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffon_announce_receivedTb4b4b4(
Tff7b72selfTb4b4b4,
Te6edf3aspectTb4b4b4: Tffa657strTb4b4b4,
Te6edf3destination_hashTb4b4b4: Tffa657bytesTb4b4b4,
Te6edf3announced_identityTb4b4b4: Te6edf3AnyTb4b4b4,
Te6edf3app_dataTb4b4b4: Tffa657bytesTb4b4b4,
Te6edf3announce_packet_hashTb4b4b4: Tffa657bytesTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_plugins_runtime_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return
Te6edf3payload Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffaspectTa5d6ff"Tb4b4b4: Te6edf3aspectTb4b4b4,
Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4: Te6edf3destination_hashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3destination_hashTb4b4b4, Tffa657bytesTb4b4b4)
Tff7b72else Tffa657strTb4b4b4(Te6edf3destination_hashTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffapp_dataTa5d6ff"Tb4b4b4: Te6edf3app_dataTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4, Te6edf3errorsTff7b72=Ta5d6ff"Ta5d6ffreplaceTa5d6ff"Tb4b4b4)
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3app_dataTb4b4b4, Tffa657bytesTb4b4b4)
Tff7b72else Tffa657strTb4b4b4(Te6edf3app_dataTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffannounce_packet_hashTa5d6ff"Tb4b4b4: Te6edf3announce_packet_hashTff7b72.Td2a8ffhexTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3announce_packet_hashTb4b4b4, Tffa657bytesTb4b4b4)
Tff7b72else Tffa657strTb4b4b4(Te6edf3announce_packet_hashTb4b4b4)Tb4b4b4,
Tb4b4b4}
Tff7b72for Te6edf3record Tff7b72in Tffa657listTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_pluginsTff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3recordTff7b72.Td2a8ffenabled Tff7b72and Tff7b72selfTff7b72.Td2a8ff_hook_allowedTb4b4b4(Te6edf3recordTb4b4b4, Ta5d6ff"Ta5d6ffannounce.receivedTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdispatch_hookTb4b4b4(Te6edf3recordTff7b72.Td2a8ffidTb4b4b4, Ta5d6ff"Ta5d6ffannounce.receivedTa5d6ff"Tb4b4b4, Te6edf3payloadTb4b4b4)
Tff7b72def Td2a8ff_register_plugin_hooksTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTb4b4b4:
Tff7b72return
Te6edf3hooks Tff7b72= Tb4b4b4(Te6edf3recordTff7b72.Td2a8ffmanifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)Tff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffhooksTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]
Tff7b72if Ta5d6ff"Ta5d6ffannounce.receivedTa5d6ff" Tff7b72in Te6edf3hooks Tff7b72and Tff7b72not Tffa657getattrTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Ta5d6ff"Ta5d6ff_plugin_announce_handler_registeredTa5d6ff"Tb4b4b4, Tff7b72False
Tb4b4b4)Tb4b4b4:
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787announce_handler Tff7b72import Te6edf3AnnounceHandler
Tff7b72import T7ee787RNS
Te6edf3handler Tff7b72= Te6edf3AnnounceHandlerTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.pluginTa5d6ff"Tb4b4b4,
Tff7b72lambda Te6edf3aspectTb4b4b4, Te6edf3dhTb4b4b4, Te6edf3aiTb4b4b4, Te6edf3adTb4b4b4, Te6edf3aphTb4b4b4: Tff7b72selfTff7b72.Td2a8ffon_announce_receivedTb4b4b4(
Te6edf3aspectTb4b4b4, Te6edf3dhTb4b4b4, Te6edf3aiTb4b4b4, Te6edf3adTb4b4b4, Te6edf3aph
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffregister_announce_handlerTb4b4b4(Te6edf3handlerTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ff_plugin_announce_handler_registered Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ff_plugin_announce_handler Tff7b72= Te6edf3handler
Tff7b72def Td2a8ff_unregister_plugin_hooksTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3recordTb4b4b4: Te6edf3PluginRecordTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTb4b4b4:
Tff7b72return
Te6edf3any_enabled_hooks Tff7b72= Tffa657anyTb4b4b4(
Te6edf3recordTff7b72.Td2a8ffenabled
Tff7b72and Ta5d6ff"Ta5d6ffannounce.receivedTa5d6ff"
Tff7b72in Tb4b4b4(Tb4b4b4(Te6edf3pTff7b72.Td2a8ffmanifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpermissionsTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4{Tb4b4b4}Tb4b4b4)Tff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffhooksTa5d6ff"Tb4b4b4) Tff7b72or Tb4b4b4[Tb4b4b4]Tb4b4b4)
Tff7b72for Te6edf3p Tff7b72in Tff7b72selfTff7b72.Td2a8ff_pluginsTff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)
Tb4b4b4)
Tff7b72if Te6edf3any_enabled_hooksTb4b4b4:
Tff7b72return
Te6edf3handler Tff7b72= Tffa657getattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4, Ta5d6ff"Ta5d6ff_plugin_announce_handlerTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Tff7b72not Te6edf3handlerTb4b4b4:
Tff7b72return
Tff7b72tryTb4b4b4:
Tff7b72import T7ee787RNS
Tff7b72if Te6edf3handler Tff7b72in Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffannounce_handlersTb4b4b4:
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffannounce_handlersTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3handlerTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ff_plugin_announce_handler_registered Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ff_plugin_announce_handler Tff7b72= Tff7b72None
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ff_broadcast_plugin_eventTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3plugin_idTb4b4b4: Tffa657strTb4b4b4, Te6edf3eventTb4b4b4: Tffa657strTb4b4b4, Te6edf3payloadTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTb4b4b4:
Tff7b72return
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787async_utils Tff7b72import Te6edf3AsyncUtils
Tff7b72import T7ee787json Tff7b72as T7ee787json_module
Te6edf3message Tff7b72= Te6edf3json_moduleTff7b72.Td2a8ffdumpsTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffplugin.eventTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffplugin_idTa5d6ff"Tb4b4b4: Te6edf3plugin_idTb4b4b4,
Ta5d6ff"Ta5d6ffeventTa5d6ff"Tb4b4b4: Te6edf3eventTb4b4b4,
Ta5d6ff"Ta5d6ffpayloadTa5d6ff"Tb4b4b4: Te6edf3payloadTb4b4b4,
Tb4b4b4}
Tb4b4b4)
Te6edf3AsyncUtilsTff7b72.Td2a8ffrun_asyncTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffwebsocket_broadcastTb4b4b4(Te6edf3messageTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffinstall_bundled_examplesTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ff_plugins_runtime_enabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return
Te6edf3bundled_root Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Tff7b72__file__Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpluginsTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Te6edf3bundled_rootTb4b4b4)Tb4b4b4:
Tff7b72return
Tff7b72for Te6edf3name Tff7b72in Tffa657sortedTb4b4b4(Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Te6edf3bundled_rootTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3source Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3bundled_rootTb4b4b4, Te6edf3nameTb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisdirTb4b4b4(Te6edf3sourceTb4b4b4)Tb4b4b4:
Tff7b72continue
Te6edf3manifest_path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3sourceTb4b4b4, Ta5d6ff"Ta5d6ffplugin.jsonTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3manifest_pathTb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72with Tffa657openTb4b4b4(Te6edf3manifest_pathTb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72as Te6edf3handleTb4b4b4:
Te6edf3manifest Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadTb4b4b4(Te6edf3handleTb4b4b4)
Tff7b72if Te6edf3manifestTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4) Tff7b72not Tff7b72in Tff7b72selfTff7b72.Td2a8ff_pluginsTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinstall_from_directoryTb4b4b4(Te6edf3sourceTb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────